from flask import Flask
from werkzeug.routing import BaseConverter


# re("[0-9]{6}") == RegexConverter(app.url_map, "正则表达式")
# 1、自定义正则转换器类
class RegexConverter(BaseConverter):
    # 重新定义regex属性（注：父类中regex是类属性，但是这里的实现方式是实例属性，变相达到了同样的效果）
    def __init__(self,map,re):
        # 1、初始化父类init方法，继承父类功能，这里map相当于url_map
        super(RegexConverter,self).__init__(map)
        # 2、子类自身的初始化
        self.regex = re

app = Flask(__name__)

# 2、将自定义的类关联到url_map.converters形成键值对
app.url_map.converters["re"]=RegexConverter
"""
app.url_map.converters["re"]即向DEFAULT_CONVERTERS 中添加键值对
DEFAULT_CONVERTERS = {
    'default':          UnicodeConverter,
    'string':           UnicodeConverter,
    'any':              AnyConverter,
    'path':             PathConverter,
    'int':              IntegerConverter,
    'float':            FloatConverter,
    'uuid':             UUIDConverter,
}
"""

@app.route('/')
def hello_world():
    return 'hello world'

#http://127.0.0.1:5000/user/123456
#3.基本使用：<re:user_id>
#传入参数的方式：re("[0-9]{6}")
@app.route('/user/<re("[0-9]{6}"):user_id>')
def demo1(user_id):
    return "user_id %s" % user_id

if __name__=='__main__':
    app.run(debug=True)